package com.cloudfun.campusshare.common.model.dto.kjt;

import com.cloudfun.campusshare.util.DateUtil;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.swagger.annotations.ApiModel;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.format.DateTimeFormatter;
import java.util.Map;

/**
 * Created by Huqin on 2020/8/3
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@Builder
@ApiModel("快捷通子账户注册请求DTO")
public class KjtSubMerchantRegReqDTO {

    /**
     * 平台方分配给用户的唯一标识
     */
    @JsonProperty("partner_user_id")
    private String partnerUserId;

    /**
     * 子商户（客户）类型 1:企业 2:个体工商户3:个人商家
     */
    @JsonProperty("customer_type")
    private String customerType;

    /**
     * [2-32]
     * 企业、个体工商户法人/个人商家姓名
     */
    private String name;

    /**
     * 可不传
     * 证件类型，
     * 01: 身份证, 03: 护照, 06:港澳来往内地通行证,07:台湾同胞来往内地通行证
     * 默认01
     */
    @JsonProperty("certificates_type")
    private String certificatesType;

    /**
     * [1,50]
     * 企业、个体工商户法人/个人商家证件号码(身份证)
     */
    @JsonProperty("certificates_number")
    private String certificatesNumber;

    /**
     * [10]
     * 企业、个体工商户法人/个人商家身份证有效期，长期为：2999-01-01
     */
    @JsonProperty("certificates_validity")
    private String certificatesValidity;
    public static final DateTimeFormatter CERTIFICATES_VALIDITY_FORMATTER = DateUtil.DATE_FORMATTER;

    /**
     * [16]
     * 企业、个体工商户/个人商家所属省份
     */
    private String province;

    /**
     * [32]
     * 企业、个体工商户/个人商家所属地市
     */
    private String city;

    /**
     * [64]
     * 企业、个体工商户/个人商家所属区县
     */
    private String area;

    /**
     * [6,256]
     * 企业、个体工商户/个人商家详细地址
     */
    private String address;

    /**
     * [6,32]
     * 企业、个体工商户/个人商家联系人姓名
     */
    @JsonProperty("contact_name")
    private String contactName;

    /**
     * [11]
     * 联系人手机号，可为企业、个体工商户业务联系人手机号；个人商家提供联系手机号
     */
    @JsonProperty("phone_num")
    private String phoneNum;

    /**
     * [6,50]
     * 联系人邮箱
     */
    private String email;

    /**
     * 银行卡类别，B：对公，C：对私
     */
    @JsonProperty("company_or_person")
    private String companyOrPerson;

    /**
     * [6,32]
     * 结算银行卡号，不支持信用卡和存折账号，只支持借记卡
     */
    @JsonProperty("bank_card_no")
    private String bankCardNo;

    /**
     * [2,32]
     * 银行卡户名
     * 1、企业：
     * 与公司名称一致;
     * 2、个体工商户：
     * 如果是对私银行卡，与法人姓名一致，如果是对公银行卡，与个体工商户企业名称一致;
     * 3、个人商家：
     * 银行卡户名必须与注册的姓名一致
     */
    @JsonProperty("bank_account_name")
    private String bankAccountName;

    /**
     * String(2,16)
     * 开户银行编码
     */
    @JsonProperty("bank_code")
    private String bankCode;

    /**
     * [2,16]
     * 开户行名称
     */
    @JsonProperty("bank_name")
    private String bankName;

    /**
     * [2,16]
     * 开户行省份
     */
    @JsonProperty("bank_prov")
    private String bankProv;

    /**
     * [2,32]
     * 开户行城市
     */
    @JsonProperty("bank_city")
    private String bankCity;

    /**
     * [2,128]
     * 开户银行支行名称
     */
    @JsonProperty("bank_branch_name")
    private String bankBranchName;

    /**
     * 可不传
     * [10,32]
     * 分支行行号
     */
    @JsonProperty("bank_line_no")
    private String bankLineNo;

    /**
     * 商户店面类型
     * 1:网店，2:门店
     */
    @JsonProperty("shop_type")
    private String shopType;

    /**
     * 影印件列表集合
     */
    @JsonProperty("photo_copy_map")
    private KjtPhotoCopyBaseDTO photoCopyMap;

    /**
     * 结算方式 1、主动提现；2、委托提现
     */
    @JsonProperty("settle_type")
    private String settleType;

    /**
     * 可不传
     * [15]
     * 委托提现起结金额 结算方式选择为2时，不可空，字段类型为数值，小数点保留2位，>=0.01的数字，单位：元，
     * 例如 当entrust_withdrawal_amount=100时，即当账户的可用余额大于或等于100时才会结算出款
     */
    @JsonProperty("entrust_withdrawal_amount")
    private String entrustWithdrawalAmount;

    /**
     * 企业/个体工商户注册则非空
     */
    @JsonProperty("company_property")
    private KjtSubMerchantRegExtBaseDTO companyProperty;

    /**
     * 可不传
     * <p>
     * 扩展备注，商户自定义，如需使用，请与技术支持联系
     * ACCOUNT_TYPE:资金账户类型，开通多种业务，用半角逗号连接
     * 101：个人一般户（充转提）
     * 102：个人结算户（收单业务）
     * 201：企业一般户（充转提）
     * 202：企业结算户（收单业务）
     * 企业、个体工商户支持账户类型：201、202
     * 个人商家支持账户类型：101、102
     * </p>
     * 不传默认仅开通结算户，请根据实际情况开户
     */
    @JsonProperty("extension")
    private Map<String, String> extension;
    /**
     * 可不传
     * [200]
     * 服务器异步通知地址，快捷通主动通知商户网站里指定的URL http/https路径，当订单完成后会回调商户并告知订单状态
     */

    @JsonProperty("notify_url")
    private String notifyUrl;


}